package top.xia17.plugins.fast.auth.register;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import top.xia17.plugins.fast.auth.model.req.UserRegisterReq;

import java.util.Map;

/**
 * 注册时验证码发送器
 * @author xia17
 */
public interface RegisterCodeLauncher {


    /**
     * 获取唯一编号
     * @return 唯一编号
     */
    String getId();


    /**
     * 发送验证码
     * 此方法会加上发送次数限制
     * @param tag 用来限制发送次数的标志
     * @param to 发给谁
     * @return 返回此次验证码uuid
     */
    String send(String tag , String to);

    /**
     * 发送验证码
     * @param to 发给谁
     * @return 返回此次验证码uuid
     */
    String send(String to);


    /**
     * 验证验证码
     * 返回值标准，-1 验证码失效 ， 0 验证码错误 ， 1 验证码正确
     *
     * @param uuid 验证码uuid
     * @param to   发给谁
     * @param val  验证码的值
     * @return int -1 验证码失效 ， 0 验证码错误 ， 1 验证码正确
     */
    int verify(String uuid, String to, String val);

    /**
     * 删除验证码
     *
     * @param uuid /
     */
    void del(String uuid);

    /**
     * 设置属性/配置
     *
     * @param properties /
     */
    void setProperties(Map<String, String> properties);

    /**
     * 获取请求信息中的接收人
     *
     * @param req /
     * @return /
     */
    String getToByReq(UserRegisterReq req);


    /**
     * 生成验证码
     *
     * @return /
     */
    default String generateCode() {
        return RandomUtil.randomNumbers(6);
    }

    /**
     * 生成uuid
     * @return /
     */
    default String generateUuid(){
        return IdUtil.simpleUUID();
    }


}
